Another round of coastal explorer changes from Justin.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 12 Nov 2004 05:59:43 +0000 (05:59 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 12 Nov 2004 05:59:43 +0000 (05:59 +0000)
Regenerate refs.
Tweak portable times.

gpsbabel/coastexp.c
gpsbabel/defs.h
gpsbabel/reference/coastexp.ref2
gpsbabel/reference/coastexp.ref4
gpsbabel/testo
gpsbabel/vecs.c
gpsbabel/xmlgeneric.c

index aa8aaf0a4bd9aa10bedf328c6d1ab0980b0b161e..1e1b4e10ea306b08ad69edb39e75c9f390508fac 100755 (executable)
@@ -31,8 +31,9 @@ FILE *ofd;
 
 #define MYNAME "coastexp"
 #define MY_CBUF 4096
-#define MY_TBUF 64
 #define MY_UBUF 128
+#define MY_TBUF 64\r
+#define MY_XBUF 128\r
 
 #if NO_EXPAT
 void
@@ -47,7 +48,6 @@ ce_read(void)
 }
 #else
 
-static void *mkshort_handle; // short-name handle
 static char *element; // Current element being parsed
 static char *cdatastr; // Current XML character data being built up (until a <lf>)
 
@@ -76,33 +76,34 @@ static queue ce_mark_head;                          // List of stand-alone marks currently found
 static ce_mark *currentMark = NULL;            // Current mark being processed
 static char *time_buffer = NULL;               // Time buffer for processing times
 static char *uuid_buffer = NULL;               // UUID buffer for processing uuid's
+static char *xml_buffer = NULL;                        // XML buffer for processing XML strings\r
 static int inRoute = 0;                                        // Are we processing a route?
 static int inMark = 0;                                 // Are we processing a mark?
 
 /* Add a route to the list of routes */
 static void
-add_route(ce_route *route)
+ce_add_route(ce_route *route)\r
 {
        ENQUEUE_TAIL(&ce_route_head, &route->Q);
 }
 
 /* Add a mark to the list of stand-alone marks */
 static void
-add_mark(ce_mark *mark)
+ce_add_mark(ce_mark *mark)\r
 {
        ENQUEUE_TAIL(&ce_mark_head, &mark->Q);
 }
 
 /* Add a mark to the specified route */
 static void
-add_mark_to_route(ce_route *route, ce_mark *mark)
+ce_add_mark_to_route(ce_route *route, ce_mark *mark)\r
 {
        ENQUEUE_TAIL(&route->ce_mark_head, &mark->Q);
 }
 
 /* Free a mark */
 static void
-free_mark(ce_mark *mark)
+ce_free_mark(ce_mark *mark)\r
 {
        xfree(mark->id);
        if (mark->created)
@@ -112,12 +113,12 @@ free_mark(ce_mark *mark)
 
 /* Free a route */
 static void
-free_route(ce_route *route)
+ce_free_route(ce_route *route)\r
 {
        queue *elem, *tmp;
        QUEUE_FOR_EACH(&route->ce_mark_head, elem, tmp) {
                ce_mark *mark = (ce_mark *) elem;
-               free_mark(mark);
+               ce_free_mark(mark);\r
        }
        xfree(route->id);
        xfree(route);
@@ -137,9 +138,10 @@ ce_start(void *data, const char *el, const char **attr)
                                // Create a CE route object and add it to the list of routes
                                currentRoute = (ce_route *) xcalloc(sizeof (ce_route), 1);
                                currentRoute->id=xstrdup(ap[1]);
+                               if (doing_rtes)\r
                                currentRoute->r = route_head_alloc();
                                QUEUE_INIT(&currentRoute->ce_mark_head);
-                               add_route(currentRoute);
+                               ce_add_route(currentRoute);\r
                        }
                }
        } else if (0 == strcmp(el, "Mark")) {
@@ -147,7 +149,7 @@ ce_start(void *data, const char *el, const char **attr)
                currentMark = (ce_mark *) xcalloc(sizeof (ce_mark), 1);
                currentMark->wp = NULL;
                currentMark->used = 0;
-               add_mark(currentMark);
+               ce_add_mark(currentMark);\r
                for (ap = attr; *ap; ap+=2) {
                        if (0 == strcmp(ap[0], "id")) {
                                // Create a CE mark object and add it to the list of stand-alone marks
@@ -199,7 +201,7 @@ ce_cdata(void *dta, const XML_Char *s, int len)
                                mark->id = xstrdup(s);
                                mark->created = NULL;
                                mark->wp = NULL;
-                               add_mark_to_route(currentRoute, mark);
+                               ce_add_mark_to_route(currentRoute, mark);\r
                        }
                } else if (0 == strcmp(element, "Position")) {
                        if (inMark) {
@@ -264,8 +266,10 @@ ce_cdata(void *dta, const XML_Char *s, int len)
                                        currentMark->wp->creation_time = mktime(&t);
                                }
                        }
-                       else if (inRoute)
+                       else if (inRoute) {\r
+                               if (doing_rtes)\r
                                currentRoute->r->rte_name = xstrdup(s);
+                       }\r
                } else if (0 == strcmp(element, "Description")) {
                        // Descriptions we care about may be either for routes or marks
                        char *desc = xstrdup(s);
@@ -325,7 +329,7 @@ ce_read(void)
 
 /* Fix waypoints in route marks from the standalone marks */
 void
-ce_fix_waypoints(void)
+ce_fix_route_mark_waypoints(void)\r
 {
        queue *elem, *tmp;
        QUEUE_FOR_EACH(&ce_route_head, elem, tmp) {
@@ -365,7 +369,7 @@ ce_check_route_names(void)
 
 /* Remove marks used in routes */
 void
-ce_remove_unused_marks(void)
+ce_remove_used_marks(void)\r
 {
        queue *elem, *tmp;
        QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {
@@ -375,7 +379,7 @@ ce_remove_unused_marks(void)
                        dequeue(elem);
                        if (mark->wp)
                                waypt_free(mark->wp);
-                       free_mark(mark);
+                       ce_free_mark(mark);\r
                }
        }
 }
@@ -412,16 +416,27 @@ ce_print_results(void)
 void
 ce_rd_deinit(void)
 {
+       /* If doing routes, we create GPSBabel route structures and waypoint structures for\r
+          any standalone waypoints.\r
+          If doing waypoints, we create only waypoint structures for both route waypoints and\r
+          standalone waypoints.\r
+       */\r
        queue *elem, *tmp;
 
-       ce_fix_waypoints();
+       if (doing_rtes) {\r
+               ce_fix_route_mark_waypoints();\r
        ce_check_route_names();
-       ce_remove_unused_marks();
-       // ce_print_results();
+               ce_remove_used_marks();\r
+       }\r
+\r
+       // Log results\r
+       if (global_opts.debug_level > 1)\r
+               ce_print_results();\r
 
        // Add routes to GPSBabel
        QUEUE_FOR_EACH(&ce_route_head, elem, tmp) {
                ce_route *route = (ce_route *) elem;
+               if (doing_rtes) {\r
                queue *elem2, *tmp2;
                route_add_head(route->r);
                QUEUE_FOR_EACH(&route->ce_mark_head, elem2, tmp2) {
@@ -431,14 +446,15 @@ ce_rd_deinit(void)
                        else
                                printf("Undefined mark: %s\n", mark->id);
                }
-               free_route(route);
+               }\r
+               ce_free_route(route);\r
        }
 
        // Add (unused) marks to GPSBabel
        QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {
                ce_mark *mark = (ce_mark *) elem;
                waypt_add(mark->wp);
-               free_mark(mark);
+               ce_free_mark(mark);\r
        }
 
        fclose(fd);
@@ -446,13 +462,16 @@ ce_rd_deinit(void)
        xfree(cdatastr);
 }
 
+/* Setup for writing */\r
 void
 ce_wr_init(const char *fname)
 {
-       mkshort_handle = mkshort_new_handle();
        QUEUE_INIT(&ce_mark_head);
+\r
+       // Alloocate all buffers used for writing\r
        time_buffer = xcalloc(MY_TBUF,1);
        uuid_buffer = xcalloc(MY_UBUF,1);
+       xml_buffer = xcalloc(MY_XBUF, 1);\r
 
        ofd = xfopen(fname, "w", MYNAME);
 }
@@ -461,25 +480,29 @@ void
 ce_wr_deinit(void)
 {
        fclose(ofd);
-       mkshort_del_handle(mkshort_handle);
+\r
+       // Free the buffers used for writing\r
        xfree(time_buffer);
        xfree(uuid_buffer);
+       xfree(xml_buffer);\r
 }
 
+/* Generate a CE-style creation time based on supplied time */\r
 static char *
 ce_gen_creation_time(time_t tm)
 {
-       struct tm *t = localtime(&tm);
-       sprintf(time_buffer, "%04d%02d%02dT%02d%02d%02dZ", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
+       xml_fill_in_time(time_buffer, tm, XML_SHORT_TIME);\r
        return time_buffer;
 }
 
+/* Generate a CE-style creation time based on current time */\r
 static char *
 ce_gen_current_time(void)
 {
        return ce_gen_creation_time(current_time());
 }
 
+/* Generate a UUID (has same format as Microsoft registry GUIDs */\r
 static char *
 ce_gen_uuid(void)
 {
@@ -491,13 +514,18 @@ ce_gen_uuid(void)
        return uuid_buffer;
 }
 
+/* Generate route header XML */\r
 static void
 ce_route_hdr(const route_head *rte)
 {
-       fprintf(ofd, "\t<Route created=\"%s\" id=\"{%s}\">\n", ce_gen_current_time(), ce_gen_uuid());
-       fprintf(ofd, "\t\t<Marks>\n");
+       if (doing_rtes) {\r
+               sprintf(xml_buffer, "{%s}", ce_gen_uuid());\r
+               write_xml_entity_begin2(ofd, "\t", "Route", "created", ce_gen_current_time(), "id", xml_buffer);\r
+               write_xml_entity_begin0(ofd, "\t\t", "Marks");\r
+       }\r
 }
 
+/* Generate route body XML */\r
 static void
 ce_route_disp(const waypoint *waypointp)
 {
@@ -508,34 +536,29 @@ ce_route_disp(const waypoint *waypointp)
        currentMark->id = id;
        currentMark->wp = (waypoint *) waypointp;
        ENQUEUE_TAIL(&ce_mark_head, &currentMark->Q);
-       fprintf(ofd, "\t\t\t%s\n", id);
+       fprintf(ofd, "\t\t\t%s\n", id); // CE's departure from XML standard!\r
 }
 
+/* Generate route trailer XML */\r
 static void
 ce_route_tlr(const route_head *rte)
 {
-       fprintf(ofd, "\t\t</Marks>\n");
-       if (rte->rte_name)
-               fprintf(ofd, "\t\t<Name>%s</Name>\n", rte->rte_name);
-       fprintf(ofd, "\t</Route>\n");
-}
-
-static void
-ce_waypt_pr(const waypoint *waypointp)
-{
+       if (doing_rtes) {\r
+               write_xml_entity_end(ofd, "\t\t", "Marks");\r
+               write_optional_xml_entity(ofd, "\t\t", "Name", rte->rte_name);\r
+               write_xml_entity_end(ofd, "\t", "Route");\r
+       }\r
 }
 
+/* Generate waypoint body XML */\r
 static void
-ce_mark_pr(void)
+ce_waypt_pr(const waypoint *wp)\r
 {
-       queue *elem, *tmp;
-       QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {
-               ce_mark *mark = (ce_mark *) elem;
-               double latitude = mark->wp->latitude;
+       double latitude = wp->latitude;\r
                char NorS = 'N';
                char EorW = 'E';
-               double longitude = mark->wp->longitude;
-               fprintf(ofd, "\t<Mark created=\"%s\" id=\"%s\">\n", ce_gen_creation_time(mark->wp->creation_time), mark->id);
+       double longitude = wp->longitude;\r
+\r
                if (latitude < 0) {
                        latitude = -latitude;
                        NorS = 'S';
@@ -544,29 +567,60 @@ ce_mark_pr(void)
                        longitude = -longitude;
                        EorW = 'W';
                }
-               fprintf(ofd, "\t\t<Position>%3.6f %c %3.6f %c</Position>\n", latitude, NorS, longitude, EorW);
-               if (mark->wp->shortname)
-                       fprintf(ofd, "\t\t<Name>%s</Name>\n", mark->wp->shortname);
-               fprintf(ofd, "\t</Mark>\n");
-               free_mark(mark);
+       sprintf(xml_buffer, "%3.6f %c %3.6f %c", latitude, NorS, longitude, EorW);\r
+       write_xml_entity(ofd, "\t\t", "Position", xml_buffer);\r
+       write_optional_xml_entity(ofd, "\t\t", "Name", wp->shortname);\r
+}\r
+\r
+/* Generate a standalone mark XML */\r
+static void\r
+ce_standalone_mark_pr(const waypoint *wp)\r
+{\r
+       write_xml_entity_begin2(ofd, "\t", "Mark",\r
+                                                       "created", ce_gen_current_time(),\r
+                                                       "id", ce_gen_uuid());\r
+       ce_waypt_pr(wp);\r
+       write_xml_entity_end(ofd, "\t", "Mark");\r
+}\r
+\r
+/* Generate all route marks */\r
+static void\r
+ce_marks_pr(void)\r
+{\r
+       queue *elem, *tmp;\r
+       QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {\r
+               ce_mark *mark = (ce_mark *) elem;\r
+               write_xml_entity_begin2(ofd, "\t", "Mark",\r
+                                                               "created", ce_gen_creation_time(mark->wp->creation_time),\r
+                                                               "id", mark->id);\r
+               ce_waypt_pr(mark->wp);\r
+               write_xml_entity_end(ofd, "\t", "Mark");\r
+               ce_free_mark(mark);\r
        }
 }
 
+/* Write all routes and marks */\r
 void
 ce_write(void)
 {
-       setshort_whitespace_ok(mkshort_handle, 0);
-       setshort_length(mkshort_handle, 32);
-
-       fprintf(ofd, "<?xml version=\"1.0\"?>\n");
-       fprintf(ofd, "<NavObjectCollection created=\"%s\"\n", ce_gen_current_time());
-       fprintf(ofd, "\t<Name>Navigation Objects</Name>\n");
+       /* If doing routes, we write out the routes and all the standalone waypoints.\r
+          If doing waypoints, we write out the route waypoints (without the routes) and\r
+          the standalone waypoints.\r
+       */\r
+       time_t now = 0;\r
+       int short_length;\r
+       now = current_time();\r
+\r
+       write_xml_header(ofd);\r
+       write_xml_entity_begin1(ofd, "", "NavObjectCollection", "created",\r
+                                                  ce_gen_current_time());\r
+       write_xml_entity(ofd, "\t", "Name", "Navigation Objects");\r
 
        route_disp_all(ce_route_hdr, ce_route_tlr, ce_route_disp);
-       ce_mark_pr();
-       waypt_disp_all(ce_waypt_pr);
+       ce_marks_pr();\r
+       waypt_disp_all(ce_standalone_mark_pr);\r
 
-       fprintf(ofd, "</NavObjectCollection>\n");
+       write_xml_entity_end(ofd, "", "NavObjectCollection");\r
 }
 
 ff_vecs_t coastexp_vecs = {
index 7e8d0ad1fac1f0dac14a603a31816b0fb9e2dbcc..32f895f1587a8c3f163eb66a5aae58851c471248 100644 (file)
@@ -86,6 +86,10 @@ typedef struct {
 extern global_options global_opts;
 extern const char gpsbabel_version[];
 
+/* Short or Long XML Times */
+#define XML_SHORT_TIME 1
+#define XML_LONG_TIME 2
+
 /*
  * Extended data if waypoint happens to represent a geocache.  This is 
  * totally voluntary data...
index ea914c8f32cd1ee636e69e5b4db173295b948fed..2f73b4d974be9cde174381cd58a52add1da26138 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
-<NavObjectCollection created="19691231T160000Z">
+<NavObjectCollection created="19700101T000000Z">
        <Name>Navigation Objects</Name>
-       <Route created="19691231T160000Z" id="{00010203-0405-0607-0809-0a0b0c0d0e0f}">
+       <Route created="19700101T000000Z" id="{00010203-0405-0607-0809-0a0b0c0d0e0f}">
                <Marks>
                        {10111213-1415-1617-1819-1a1b1c1d1e1f}
                        {20212223-2425-2627-2829-2a2b2c2d2e2f}
                </Marks>
                <Name>Into The Bay</Name>
        </Route>
-       <Mark created="20041105T170909Z" id="{10111213-1415-1617-1819-1a1b1c1d1e1f}">
+       <Mark created="20041106T010909Z" id="{10111213-1415-1617-1819-1a1b1c1d1e1f}">
                <Position>37.763290 N 122.282580 W</Position>
                <Name>SFBALBAY</Name>
        </Mark>
-       <Mark created="20041105T170910Z" id="{20212223-2425-2627-2829-2a2b2c2d2e2f}">
+       <Mark created="20041106T010910Z" id="{20212223-2425-2627-2829-2a2b2c2d2e2f}">
                <Position>37.751613 N 122.339028 W</Position>
                <Name>SFBAY001</Name>
        </Mark>
-       <Mark created="20041105T170913Z" id="{30313233-3435-3637-3839-3a3b3c3d3e3f}">
+       <Mark created="20041106T010913Z" id="{30313233-3435-3637-3839-3a3b3c3d3e3f}">
                <Position>37.817420 N 122.394305 W</Position>
                <Name>SFBAY002</Name>
        </Mark>
-       <Mark created="20041105T170916Z" id="{40414243-4445-4647-4849-4a4b4c4d4e4f}">
+       <Mark created="20041106T010916Z" id="{40414243-4445-4647-4849-4a4b4c4d4e4f}">
                <Position>37.819339 N 122.478302 W</Position>
                <Name>SFGGBRDG</Name>
        </Mark>
-       <Mark created="20041105T170920Z" id="{50515253-5455-5657-5859-5a5b5c5d5e5f}">
+       <Mark created="20041106T010920Z" id="{50515253-5455-5657-5859-5a5b5c5d5e5f}">
                <Position>37.773033 N 122.605838 W</Position>
                <Name>SFCHNL01</Name>
        </Mark>
-       <Mark created="20041105T170926Z" id="{60616263-6465-6667-6869-6a6b6c6d6e6f}">
+       <Mark created="20041106T010926Z" id="{60616263-6465-6667-6869-6a6b6c6d6e6f}">
                <Position>37.518860 N 122.529914 W</Position>
                <Name>HMCOLREF</Name>
        </Mark>
-       <Mark created="20041105T170927Z" id="{70717273-7475-7677-7879-7a7b7c7d7e7f}">
+       <Mark created="20041106T010927Z" id="{70717273-7475-7677-7879-7a7b7c7d7e7f}">
                <Position>37.482348 N 122.507704 W</Position>
                <Name>HMPILL01</Name>
        </Mark>
-       <Mark created="20041105T211624Z" id="{80818283-8485-8687-8889-8a8b8c8d8e8f}">
+       <Mark created="20041106T051624Z" id="{80818283-8485-8687-8889-8a8b8c8d8e8f}">
                <Position>37.475062 N 122.488531 W</Position>
                <Name>HMPILLPT</Name>
        </Mark>
-       <Mark created="20041105T170929Z" id="{90919293-9495-9697-9899-9a9b9c9d9e9f}">
+       <Mark created="20041106T010929Z" id="{90919293-9495-9697-9899-9a9b9c9d9e9f}">
                <Position>37.476448 N 122.475800 W</Position>
                <Name>HMPILL02</Name>
        </Mark>
-       <Mark created="20041105T170930Z" id="{a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf}">
+       <Mark created="20041106T010930Z" id="{a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf}">
                <Position>37.495102 N 122.483927 W</Position>
                <Name>HMPILL03</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+       <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
                <Position>37.229349 N 122.441589 W</Position>
                <Name>PESCDR01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+       <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
                <Position>37.183397 N 122.411904 W</Position>
                <Name>PIGEON01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+       <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
                <Position>37.090736 N 122.348775 W</Position>
                <Name>ANONUV01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+       <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
                <Position>36.929502 N 122.113725 W</Position>
                <Name>SCRUZ01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+       <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
                <Position>36.934235 N 122.022130 W</Position>
                <Name>SCRUZ02</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+       <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
                <Position>36.960666 N 122.024734 W</Position>
                <Name>SCRUZENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+       <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
                <Position>36.581344 N 121.995411 W</Position>
                <Name>CYPRSSPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+       <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
                <Position>36.301110 N 121.919097 W</Position>
                <Name>PTSUR</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+       <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
                <Position>36.238177 N 121.855209 W</Position>
                <Name>COOPERPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+       <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
                <Position>36.225175 N 121.801314 W</Position>
                <Name>PFEIFENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+       <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
                <Position>36.230449 N 121.797444 W</Position>
                <Name>PFEIFANC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+       <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
                <Position>35.879801 N 121.498947 W</Position>
                <Name>SANMRT01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
+       <Mark created="19700101T000000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
                <Position>35.652801 N 121.308485 W</Position>
                <Name>PDRSBLNC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
+       <Mark created="19700101T000000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
                <Position>35.623297 N 121.185920 W</Position>
                <Name>SNSMNENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
+       <Mark created="19700101T000000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
                <Position>35.640478 N 121.183772 W</Position>
                <Name>SNSMNANC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
+       <Mark created="19700101T000000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
                <Position>35.572353 N 121.152797 W</Position>
                <Name>CAMBRIA</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+       <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
                <Position>35.449214 N 121.020825 W</Position>
                <Name>PTESTERO</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+       <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
                <Position>35.216602 N 120.928391 W</Position>
                <Name>PTBUCHON</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+       <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
                <Position>34.883361 N 120.684631 W</Position>
                <Name>PTSAL01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+       <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
                <Position>34.884641 N 120.652026 W</Position>
                <Name>PTSALENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+       <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
                <Position>34.896555 N 120.649124 W</Position>
                <Name>PTSALANC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+       <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
                <Position>34.758180 N 120.642516 W</Position>
                <Name>PURSMAPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+       <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
                <Position>34.572579 N 120.663636 W</Position>
                <Name>PTARGLLO</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+       <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
                <Position>34.113844 N 120.492630 W</Position>
                <Name>SANMGL01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+       <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
                <Position>34.029483 N 120.471409 W</Position>
                <Name>SANMGL02</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+       <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
                <Position>34.019184 N 120.444197 W</Position>
                <Name>SANMGL03</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+       <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
                <Position>34.023478 N 120.438209 W</Position>
                <Name>ADCOVENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+       <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
                <Position>34.028615 N 120.439696 W</Position>
                <Name>ADCOVANC</Name>
        </Mark>
index 7752443aa6b1f5d6de09b177f9e57201e3262674..1cbc015dc953e4aff7e88b9686652e0ada02a81b 100644 (file)
 <?xml version="1.0"?>
-<NavObjectCollection created="19691231T160000Z">
+<NavObjectCollection created="19700101T000000Z">
        <Name>Navigation Objects</Name>
-       <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+       <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
                <Position>37.763290 N 122.282580 W</Position>
                <Name>SFBALBAY</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+       <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
                <Position>37.751613 N 122.339028 W</Position>
                <Name>SFBAY001</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+       <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
                <Position>37.817420 N 122.394305 W</Position>
                <Name>SFBAY002</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+       <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
                <Position>37.819339 N 122.478302 W</Position>
                <Name>SFGGBRDG</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+       <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
                <Position>37.773033 N 122.605838 W</Position>
                <Name>SFCHNL01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+       <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
                <Position>37.518860 N 122.529914 W</Position>
                <Name>HMCOLREF</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+       <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
                <Position>37.482348 N 122.507704 W</Position>
                <Name>HMPILL01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
+       <Mark created="19700101T000000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
                <Position>37.476448 N 122.475800 W</Position>
                <Name>HMPILL02</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
+       <Mark created="19700101T000000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
                <Position>37.495102 N 122.483927 W</Position>
                <Name>HMPILL03</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
+       <Mark created="19700101T000000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
                <Position>37.229349 N 122.441589 W</Position>
                <Name>PESCDR01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
+       <Mark created="19700101T000000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
                <Position>37.183397 N 122.411904 W</Position>
                <Name>PIGEON01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+       <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
                <Position>37.090736 N 122.348775 W</Position>
                <Name>ANONUV01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+       <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
                <Position>36.929502 N 122.113725 W</Position>
                <Name>SCRUZ01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+       <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
                <Position>36.934235 N 122.022130 W</Position>
                <Name>SCRUZ02</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+       <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
                <Position>36.960666 N 122.024734 W</Position>
                <Name>SCRUZENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+       <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
                <Position>37.475062 N 122.488531 W</Position>
                <Name>HMPILLPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+       <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
                <Position>36.581344 N 121.995411 W</Position>
                <Name>CYPRSSPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+       <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
                <Position>36.301110 N 121.919097 W</Position>
                <Name>PTSUR</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+       <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
                <Position>36.238177 N 121.855209 W</Position>
                <Name>COOPERPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+       <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
                <Position>36.225175 N 121.801314 W</Position>
                <Name>PFEIFENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+       <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
                <Position>36.230449 N 121.797444 W</Position>
                <Name>PFEIFANC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+       <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
                <Position>35.879801 N 121.498947 W</Position>
                <Name>SANMRT01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+       <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
                <Position>35.652801 N 121.308485 W</Position>
                <Name>PDRSBLNC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
+       <Mark created="19700101T000000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
                <Position>35.623297 N 121.185920 W</Position>
                <Name>SNSMNENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
+       <Mark created="19700101T000000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
                <Position>35.640478 N 121.183772 W</Position>
                <Name>SNSMNANC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
+       <Mark created="19700101T000000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
                <Position>35.572353 N 121.152797 W</Position>
                <Name>CAMBRIA</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
+       <Mark created="19700101T000000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
                <Position>35.449214 N 121.020825 W</Position>
                <Name>PTESTERO</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+       <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
                <Position>35.216602 N 120.928391 W</Position>
                <Name>PTBUCHON</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+       <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
                <Position>34.883361 N 120.684631 W</Position>
                <Name>PTSAL01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+       <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
                <Position>34.884641 N 120.652026 W</Position>
                <Name>PTSALENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+       <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
                <Position>34.896555 N 120.649124 W</Position>
                <Name>PTSALANC</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+       <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
                <Position>34.758180 N 120.642516 W</Position>
                <Name>PURSMAPT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+       <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
                <Position>34.572579 N 120.663636 W</Position>
                <Name>PTARGLLO</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+       <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
                <Position>34.113844 N 120.492630 W</Position>
                <Name>SANMGL01</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+       <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
                <Position>34.029483 N 120.471409 W</Position>
                <Name>SANMGL02</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+       <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
                <Position>34.019184 N 120.444197 W</Position>
                <Name>SANMGL03</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+       <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
                <Position>34.023478 N 120.438209 W</Position>
                <Name>ADCOVENT</Name>
        </Mark>
-       <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+       <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
                <Position>34.028615 N 120.439696 W</Position>
                <Name>ADCOVANC</Name>
        </Mark>
index cd772eead21b36e4f92cad954e18b891448770f1..37a35d2deadf0a0bbfdd50b91d589c88e3337dbc 100755 (executable)
@@ -401,12 +401,6 @@ ${PNAME} -i navicache -f reference/navicache.xml -o gpsutil -F ${TMPDIR}/navi.wp
 compare ${TMPDIR}/navi.wpt reference/navicache.ref
 #
 
-#
-# CoastalExplorer..
-${PNAME} -i coastexp -f reference/coastexp.nob -o gpx -F ${TMPDIR}/coastexp.gpx
-compare ${TMPDIR}/coastexp.gpx reference/coastexp.ref
-#
-
 #
 # CoastalExplorer..
 ${PNAME} -r -i coastexp -f reference/coastexp.nob -o gpx -F ${TMPDIR}/coastexp.gpx
index 0229ebc3b99964f40f7e7823a17703945deca75e..81af43c3899dc33e669c9ba8312313559c66699e 100644 (file)
@@ -228,7 +228,7 @@ vecs_t vec_list[] = {
        {
                &coastexp_vecs,
                "coastexp",
-               "CoastalExplorer.com XML",
+               "CoastalExplorer XML",
                NULL
        },
        {       /* MRCB */
index 14e254bbf24988d80dd9a78402fdceb1c5bc64e2..35f76060376bfe99edfe092bd75b13baae256cfa 100644 (file)
@@ -91,21 +91,35 @@ write_xml_entity_end(FILE *ofd, const char *indent,
 }
 
 void
-xml_write_time(FILE *ofd, const time_t timep, char *elname)
+xml_fill_in_time(char *time_string, const time_t timep, int long_or_short)
 {
        struct tm *tm = gmtime(&timep);
+       char *format;
        
        if (!tm)
                return;
        
-       fprintf(ofd, "<%s>%02d-%02d-%02dT%02d:%02d:%02dZ</%s>\n",
-               elname,
+       if (long_or_short == XML_LONG_TIME)
+               format = "%02d-%02d-%02dT%02d:%02d:%02dZ";
+       else
+               format = "%02d%02d%02dT%02d%02d%02dZ";
+       sprintf(time_string, format,
                tm->tm_year+1900, 
                tm->tm_mon+1, 
                tm->tm_mday, 
                tm->tm_hour, 
                tm->tm_min, 
-               tm->tm_sec,
+               tm->tm_sec);
+}
+
+void
+xml_write_time(FILE *ofd, const time_t timep, char *elname)
+{
+       char time_string[64];
+       xml_fill_in_time(time_string, timep, XML_LONG_TIME);
+       fprintf(ofd, "<%s>%s</%s>\n",
+               elname,
+               time_string,
                elname
        );